package ru.averta.notes.domain;


import org.hibernate.search.annotations.IndexedEmbedded;
import ru.averta.notes.domain.abstr.AbstractPersistentObject;

import javax.persistence.*;

@Entity
@Table(name = "Tag_Connector")
public class TagConnector extends AbstractPersistentObject {

    /*
    lazy потому что смотри http://stackoverflow.com/questions/2222840/hibernate-enabling-lazy-fetching-in-criteria-api
    метод findTagConnectorsByCUser грузил бы слишком большое дерево
     */
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "SUBJECT_ID", nullable=false)
    private Site baseSubject;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "TAG_ID", nullable=false)
    @IndexedEmbedded(depth=1)
    private Tag tag;

    @Column(name = "USER_ID", nullable = false)
	private Long userId; //Пользователь нам необходим, чтобы отбирать все теги пользователя

    public TagConnector() {
    }

    public TagConnector(Site object, Tag tag) {
        this.baseSubject = object;
        this.tag = tag;
        this.userId = object.getUser().getId();
    }

    public Tag getTag() {
        return tag;
    }

    public Site getBaseSubject() {
        return baseSubject;
    }

    /**
     * Возвращает true, если tc указывает на тот же subject
     *
     * @param tc
     * @return
     */
    public boolean isSameSubject(TagConnector tc) {
        return this.baseSubject.getId() == tc.getBaseSubject().getId();
    }

    /**
     * Возвращает true, если текущий tc указывает на тот же subject
     *
     * @param baseSubject
     * @return
     */
    public boolean isSameSubject(Site baseSubject) {
        return this.baseSubject.getId() == baseSubject.getId();
    }
}
